package org.openarchitectureware.recipe2.dsl.parser.antlr.internal; 

import java.io.InputStream;
import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.xtext.parsetree.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import org.eclipse.xtext.conversion.ValueConverterException;
import org.openarchitectureware.recipe2.dsl.services.DetectorGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

public class InternalDetectorParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_STRING", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'plugin'", "'detector'", "'{'", "'message'", "'}'", "'param'", "':'"
    };
    public static final int RULE_ID=4;
    public static final int RULE_STRING=5;
    public static final int RULE_ANY_OTHER=10;
    public static final int RULE_INT=6;
    public static final int RULE_WS=9;
    public static final int RULE_SL_COMMENT=8;
    public static final int EOF=-1;
    public static final int RULE_ML_COMMENT=7;

        public InternalDetectorParser(TokenStream input) {
            super(input);
        }
        

    public String[] getTokenNames() { return tokenNames; }
    public String getGrammarFileName() { return "../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g"; }


     
     	private DetectorGrammarAccess grammarAccess;
     	
        public InternalDetectorParser(TokenStream input, IAstFactory factory, DetectorGrammarAccess grammarAccess) {
            this(input);
            this.factory = factory;
            registerRules(grammarAccess.getGrammar());
            this.grammarAccess = grammarAccess;
        }
        
        @Override
        protected InputStream getTokenFile() {
        	ClassLoader classLoader = getClass().getClassLoader();
        	return classLoader.getResourceAsStream("org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.tokens");
        }
        
        @Override
        protected String getFirstRuleName() {
        	return "RecipeDetectorModel";	
       	} 



    // $ANTLR start entryRuleRecipeDetectorModel
    // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:72:1: entryRuleRecipeDetectorModel returns [EObject current=null] : iv_ruleRecipeDetectorModel= ruleRecipeDetectorModel EOF ;
    public final EObject entryRuleRecipeDetectorModel() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleRecipeDetectorModel = null;


        try {
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:72:61: (iv_ruleRecipeDetectorModel= ruleRecipeDetectorModel EOF )
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:73:2: iv_ruleRecipeDetectorModel= ruleRecipeDetectorModel EOF
            {
             currentNode = createCompositeNode(grammarAccess.getRecipeDetectorModelRule(), currentNode); 
            pushFollow(FOLLOW_ruleRecipeDetectorModel_in_entryRuleRecipeDetectorModel73);
            iv_ruleRecipeDetectorModel=ruleRecipeDetectorModel();
            _fsp--;

             current =iv_ruleRecipeDetectorModel; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleRecipeDetectorModel83); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleRecipeDetectorModel


    // $ANTLR start ruleRecipeDetectorModel
    // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:80:1: ruleRecipeDetectorModel returns [EObject current=null] : ( 'plugin' (lv_name_1= RULE_ID ) (lv_bugDetectors_2= ruleDetector )* ) ;
    public final EObject ruleRecipeDetectorModel() throws RecognitionException {
        EObject current = null;

        Token lv_name_1=null;
        EObject lv_bugDetectors_2 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:85:6: ( ( 'plugin' (lv_name_1= RULE_ID ) (lv_bugDetectors_2= ruleDetector )* ) )
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:86:1: ( 'plugin' (lv_name_1= RULE_ID ) (lv_bugDetectors_2= ruleDetector )* )
            {
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:86:1: ( 'plugin' (lv_name_1= RULE_ID ) (lv_bugDetectors_2= ruleDetector )* )
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:86:2: 'plugin' (lv_name_1= RULE_ID ) (lv_bugDetectors_2= ruleDetector )*
            {
            match(input,11,FOLLOW_11_in_ruleRecipeDetectorModel117); 

                    createLeafNode(grammarAccess.getRecipeDetectorModelAccess().getPluginKeyword_0(), null); 
                
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:90:1: (lv_name_1= RULE_ID )
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:92:6: lv_name_1= RULE_ID
            {
            lv_name_1=(Token)input.LT(1);
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleRecipeDetectorModel139); 

            		createLeafNode(grammarAccess.getRecipeDetectorModelAccess().getNameIDTerminalRuleCall_1_0(), "name"); 
            	

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getRecipeDetectorModelRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        
            	        try {
            	       		set(current, "name", lv_name_1, "ID", lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }

            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:110:2: (lv_bugDetectors_2= ruleDetector )*
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

                if ( (LA1_0==12) ) {
                    alt1=1;
                }


                switch (alt1) {
            	case 1 :
            	    // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:113:6: lv_bugDetectors_2= ruleDetector
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getRecipeDetectorModelAccess().getBugDetectorsDetectorParserRuleCall_2_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleDetector_in_ruleRecipeDetectorModel181);
            	    lv_bugDetectors_2=ruleDetector();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getRecipeDetectorModelRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        
            	    	        try {
            	    	       		add(current, "bugDetectors", lv_bugDetectors_2, "Detector", currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }
            	    break;

            	default :
            	    break loop1;
                }
            } while (true);


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleRecipeDetectorModel


    // $ANTLR start entryRuleDetector
    // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:138:1: entryRuleDetector returns [EObject current=null] : iv_ruleDetector= ruleDetector EOF ;
    public final EObject entryRuleDetector() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleDetector = null;


        try {
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:138:50: (iv_ruleDetector= ruleDetector EOF )
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:139:2: iv_ruleDetector= ruleDetector EOF
            {
             currentNode = createCompositeNode(grammarAccess.getDetectorRule(), currentNode); 
            pushFollow(FOLLOW_ruleDetector_in_entryRuleDetector219);
            iv_ruleDetector=ruleDetector();
            _fsp--;

             current =iv_ruleDetector; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleDetector229); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleDetector


    // $ANTLR start ruleDetector
    // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:146:1: ruleDetector returns [EObject current=null] : ( 'detector' (lv_predef_1= RULE_STRING ) '{' ( 'message' (lv_message_4= RULE_STRING ) )? (lv_parameters_5= ruleParameter )* '}' ) ;
    public final EObject ruleDetector() throws RecognitionException {
        EObject current = null;

        Token lv_predef_1=null;
        Token lv_message_4=null;
        EObject lv_parameters_5 = null;


         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:151:6: ( ( 'detector' (lv_predef_1= RULE_STRING ) '{' ( 'message' (lv_message_4= RULE_STRING ) )? (lv_parameters_5= ruleParameter )* '}' ) )
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:152:1: ( 'detector' (lv_predef_1= RULE_STRING ) '{' ( 'message' (lv_message_4= RULE_STRING ) )? (lv_parameters_5= ruleParameter )* '}' )
            {
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:152:1: ( 'detector' (lv_predef_1= RULE_STRING ) '{' ( 'message' (lv_message_4= RULE_STRING ) )? (lv_parameters_5= ruleParameter )* '}' )
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:152:2: 'detector' (lv_predef_1= RULE_STRING ) '{' ( 'message' (lv_message_4= RULE_STRING ) )? (lv_parameters_5= ruleParameter )* '}'
            {
            match(input,12,FOLLOW_12_in_ruleDetector263); 

                    createLeafNode(grammarAccess.getDetectorAccess().getDetectorKeyword_0(), null); 
                
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:156:1: (lv_predef_1= RULE_STRING )
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:158:6: lv_predef_1= RULE_STRING
            {
            lv_predef_1=(Token)input.LT(1);
            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleDetector285); 

            		createLeafNode(grammarAccess.getDetectorAccess().getPredefSTRINGTerminalRuleCall_1_0(), "predef"); 
            	

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getDetectorRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        
            	        try {
            	       		set(current, "predef", lv_predef_1, "STRING", lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }

            match(input,13,FOLLOW_13_in_ruleDetector302); 

                    createLeafNode(grammarAccess.getDetectorAccess().getLeftCurlyBracketKeyword_2(), null); 
                
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:180:1: ( 'message' (lv_message_4= RULE_STRING ) )?
            int alt2=2;
            int LA2_0 = input.LA(1);

            if ( (LA2_0==14) ) {
                alt2=1;
            }
            switch (alt2) {
                case 1 :
                    // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:180:2: 'message' (lv_message_4= RULE_STRING )
                    {
                    match(input,14,FOLLOW_14_in_ruleDetector312); 

                            createLeafNode(grammarAccess.getDetectorAccess().getMessageKeyword_3_0(), null); 
                        
                    // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:184:1: (lv_message_4= RULE_STRING )
                    // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:186:6: lv_message_4= RULE_STRING
                    {
                    lv_message_4=(Token)input.LT(1);
                    match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleDetector334); 

                    		createLeafNode(grammarAccess.getDetectorAccess().getMessageSTRINGTerminalRuleCall_3_1_0(), "message"); 
                    	

                    	        if (current==null) {
                    	            current = factory.create(grammarAccess.getDetectorRule().getType().getClassifier());
                    	            associateNodeWithAstElement(currentNode, current);
                    	        }
                    	        
                    	        try {
                    	       		set(current, "message", lv_message_4, "STRING", lastConsumedNode);
                    	        } catch (ValueConverterException vce) {
                    				handleValueConverterException(vce);
                    	        }
                    	    

                    }


                    }
                    break;

            }

            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:204:4: (lv_parameters_5= ruleParameter )*
            loop3:
            do {
                int alt3=2;
                int LA3_0 = input.LA(1);

                if ( (LA3_0==16) ) {
                    alt3=1;
                }


                switch (alt3) {
            	case 1 :
            	    // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:207:6: lv_parameters_5= ruleParameter
            	    {
            	     
            	    	        currentNode=createCompositeNode(grammarAccess.getDetectorAccess().getParametersParameterParserRuleCall_4_0(), currentNode); 
            	    	    
            	    pushFollow(FOLLOW_ruleParameter_in_ruleDetector378);
            	    lv_parameters_5=ruleParameter();
            	    _fsp--;


            	    	        if (current==null) {
            	    	            current = factory.create(grammarAccess.getDetectorRule().getType().getClassifier());
            	    	            associateNodeWithAstElement(currentNode.getParent(), current);
            	    	        }
            	    	        
            	    	        try {
            	    	       		add(current, "parameters", lv_parameters_5, "Parameter", currentNode);
            	    	        } catch (ValueConverterException vce) {
            	    				handleValueConverterException(vce);
            	    	        }
            	    	        currentNode = currentNode.getParent();
            	    	    

            	    }
            	    break;

            	default :
            	    break loop3;
                }
            } while (true);

            match(input,15,FOLLOW_15_in_ruleDetector392); 

                    createLeafNode(grammarAccess.getDetectorAccess().getRightCurlyBracketKeyword_5(), null); 
                

            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleDetector


    // $ANTLR start entryRuleParameter
    // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:236:1: entryRuleParameter returns [EObject current=null] : iv_ruleParameter= ruleParameter EOF ;
    public final EObject entryRuleParameter() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleParameter = null;


        try {
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:236:51: (iv_ruleParameter= ruleParameter EOF )
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:237:2: iv_ruleParameter= ruleParameter EOF
            {
             currentNode = createCompositeNode(grammarAccess.getParameterRule(), currentNode); 
            pushFollow(FOLLOW_ruleParameter_in_entryRuleParameter425);
            iv_ruleParameter=ruleParameter();
            _fsp--;

             current =iv_ruleParameter; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleParameter435); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end entryRuleParameter


    // $ANTLR start ruleParameter
    // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:244:1: ruleParameter returns [EObject current=null] : ( 'param' (lv_name_1= RULE_ID ) ':' (lv_value_3= RULE_STRING ) ) ;
    public final EObject ruleParameter() throws RecognitionException {
        EObject current = null;

        Token lv_name_1=null;
        Token lv_value_3=null;

         EObject temp=null; setCurrentLookahead(); resetLookahead(); 
            
        try {
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:249:6: ( ( 'param' (lv_name_1= RULE_ID ) ':' (lv_value_3= RULE_STRING ) ) )
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:250:1: ( 'param' (lv_name_1= RULE_ID ) ':' (lv_value_3= RULE_STRING ) )
            {
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:250:1: ( 'param' (lv_name_1= RULE_ID ) ':' (lv_value_3= RULE_STRING ) )
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:250:2: 'param' (lv_name_1= RULE_ID ) ':' (lv_value_3= RULE_STRING )
            {
            match(input,16,FOLLOW_16_in_ruleParameter469); 

                    createLeafNode(grammarAccess.getParameterAccess().getParamKeyword_0(), null); 
                
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:254:1: (lv_name_1= RULE_ID )
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:256:6: lv_name_1= RULE_ID
            {
            lv_name_1=(Token)input.LT(1);
            match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleParameter491); 

            		createLeafNode(grammarAccess.getParameterAccess().getNameIDTerminalRuleCall_1_0(), "name"); 
            	

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getParameterRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        
            	        try {
            	       		set(current, "name", lv_name_1, "ID", lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }

            match(input,17,FOLLOW_17_in_ruleParameter508); 

                    createLeafNode(grammarAccess.getParameterAccess().getColonKeyword_2(), null); 
                
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:278:1: (lv_value_3= RULE_STRING )
            // ../org.openarchitectureware.recipe2.dsl.detector/src-gen/org/openarchitectureware/recipe2/dsl/parser/antlr/internal/InternalDetector.g:280:6: lv_value_3= RULE_STRING
            {
            lv_value_3=(Token)input.LT(1);
            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleParameter530); 

            		createLeafNode(grammarAccess.getParameterAccess().getValueSTRINGTerminalRuleCall_3_0(), "value"); 
            	

            	        if (current==null) {
            	            current = factory.create(grammarAccess.getParameterRule().getType().getClassifier());
            	            associateNodeWithAstElement(currentNode, current);
            	        }
            	        
            	        try {
            	       		set(current, "value", lv_value_3, "STRING", lastConsumedNode);
            	        } catch (ValueConverterException vce) {
            				handleValueConverterException(vce);
            	        }
            	    

            }


            }


            }

             resetLookahead(); 
                	lastConsumedNode = currentNode;
                
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end ruleParameter


 

    public static final BitSet FOLLOW_ruleRecipeDetectorModel_in_entryRuleRecipeDetectorModel73 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleRecipeDetectorModel83 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_11_in_ruleRecipeDetectorModel117 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleRecipeDetectorModel139 = new BitSet(new long[]{0x0000000000001002L});
    public static final BitSet FOLLOW_ruleDetector_in_ruleRecipeDetectorModel181 = new BitSet(new long[]{0x0000000000001002L});
    public static final BitSet FOLLOW_ruleDetector_in_entryRuleDetector219 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleDetector229 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_12_in_ruleDetector263 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleDetector285 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_13_in_ruleDetector302 = new BitSet(new long[]{0x000000000001C000L});
    public static final BitSet FOLLOW_14_in_ruleDetector312 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleDetector334 = new BitSet(new long[]{0x0000000000018000L});
    public static final BitSet FOLLOW_ruleParameter_in_ruleDetector378 = new BitSet(new long[]{0x0000000000018000L});
    public static final BitSet FOLLOW_15_in_ruleDetector392 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleParameter_in_entryRuleParameter425 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleParameter435 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_16_in_ruleParameter469 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleParameter491 = new BitSet(new long[]{0x0000000000020000L});
    public static final BitSet FOLLOW_17_in_ruleParameter508 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleParameter530 = new BitSet(new long[]{0x0000000000000002L});

}